;/*==================================================================================================
;  Description   Main
;  
;  20080905      Wim       Created
;==================================================================================================*/
#include %A_ScriptDir%\general.ahk
#include %A_ScriptDir%\CommandLine.ahk


SetMouseDelay, 75
HotKey, ^+1, Start
HotKey, ^+2, Stop
HotKey, ^+3, RunOnce
HotKey, ^+q, Quit
HotKey, ^+x, Quit

infoLines := 0
Caption := "Autohotkey script runner - " 


;/*==================================================================================================
;  Description
;  
;  20100113      Wim       Created
;==================================================================================================*/
;Gui, +Resize              
Gui, Add, Text, x516 y40 w0 h0 , Text
Gui, Add, ListBox, vInfoList x0 y0 r20 w600,
Gui, Add, Button,  ym w80, Load 
Gui, Add, Button,     w80, Reload
Gui, Add, Button,     w80, Clear
Gui, Add, Button,     w80, Content
Gui, Add, Button,  y+20   w80, Start
Gui, Add, Button,     w80, Stop
Gui, Add, Button,     w80, RunOnce
Gui, Add, Button,  Y+20   w80, Exit
Gui, Show, AutoSize,  %Caption%


GetCmdLine()
return


;/*==================================================================================================
;  Description
;  
;  20100113      Wim       Created
;==================================================================================================*/
Quit:
ButtonExit:
GuiClose:
  ExitApp
  return


;/*==================================================================================================
;  Description
;  
;  20100113      Wim       Created
;==================================================================================================*/
ButtonLoad:
  Gui +OwnDialogs  ; Force the user to dismiss the FileSelectFile dialog before returning to the main window.
  FileSelectFile, SelectedFileName, 3,, Open File, AutoHotKey scripts (*.ahk)
  if SelectedFileName =  ; No file selected.
    return
  
  Clear()  
  DisplayFile(SelectedFileName)
  return


;/*==================================================================================================
;  Description
;  
;  20100113      Wim       Created
;==================================================================================================*/
ButtonContent:
  Info(SelectedFileName)
  if SelectedFileName !=
    DisplayFile(SelectedFileName)
  return


;/*==================================================================================================
;  Description
;  
;  20100113      Wim       Created
;==================================================================================================*/
Stop:
ButtonStop:
  running := 0
  return


;/*==================================================================================================
;  Description
;  
;  20100113      Wim       Created
;==================================================================================================*/
ButtonClear:
  Clear()
  return


;/*==================================================================================================
;  Description
;  
;  20100113      Wim       Created
;==================================================================================================*/
RunOnce:
ButtonRunOnce:
  Runs = 1
  Goto, DoRun
  return


;/*==================================================================================================
;  Description
;  
;  20100113      Wim       Created
;==================================================================================================*/
Start:
ButtonStart:
  Runs = 0
  Goto, DoRun
  return


;/*==================================================================================================
;  Description
;  
;  20100113      Wim       Created
;==================================================================================================*/
DoRun:
  delta := 2
  sleeper := 0
  outX := 0
  outY := 0
  state := 0
  running := 1
  index := 1
  lines := ""
  lineCount := 0
  line := ""
  params =
  
  Info("Running")
  WinMove, Diva Script, , 0, 0
  
  Loop, Read, %SelectedFileName% 
  {
    lineCount += 1
    lines%lineCount% := A_LoopReadLine
  }
  
  Loop
  {
    loop %lineCount%
    {
      if (Execute(A_Index , lines%A_Index%, delta))
        running := 0
      
      if (running = 0)
        break
    }
    if (running = 0)
      break
    
    if (Runs = 1)
      break
  }
  Info("Stopped")
  return


;/*==================================================================================================
;  Description
;  
;  20100113      Wim       Created
;==================================================================================================*/
Execute(index, line, delta)
{
  inf = %index%: %line%
  Info(inf)
  StringSplit, params, line, `,
  params2 = %params2%
  params3 = %params3%
  params4 = %params4%
  params5 = %params5%
  ;MsgBox %index% : [%params1%]`, [%params2%]`, [%params3%]`, [%params4%]
  
  if (params1 = "WinWait")
  {
    WinWait, %params2%,
  }
  else if (params1 = "IfWinNotActive")
  {
    IfWinNotActive, %params2%, %params3% 
    {
      WinActivate, %params5%, params6
    }
  }
  else if (params1 = "WinWaitActive")
  {
    WinWaitActive, %params2%, %params3%  
  }
  else if (params1 = "MouseClick")
  {
    MouseClickRandomPath(params3, params4) 
  }
  else if (params1 = "MouseMove")
  {
    MouseMoveRandomPath(params3, params4)
  }
  else if (params1 = "MouseClickRel")
  {
    MouseClickRel(params3, params4)
  }
  else if (params1 = "Send")
  {
    Send, %params2%
  }
  else if (params1 = "Sleep")
  {
    Sleep, %params2%
  }
  else if (params1 = "SetTitleMatchMode")
  {
    SetTitleMatchMode, %params2%
  }
  else if (params1 = "Stop")
  {
    return true
  }
  else if (params1 != "") && (SubStr(params1, 1, 1) != ";")
  {
    Info(params1[0])
    Info("Unhandled command: " . params1)
  }
  return false
}


;/*==================================================================================================
;  Description
;  
;  20100113      Wim       Created
;==================================================================================================*/
Info(line)
{
  ;static infolist
  global infoLines 
  
  if (infoLines > 250)
    Clear()
  
  ;infolist = %infolist%|%line%
  ;GuiControl, , InfoList, %infolist%
  GuiControl, , InfoList, %line%
  infoLines ++
}


;/*==================================================================================================
;  Description
;  
;  20100113      Wim       Created
;==================================================================================================*/
Clear()
{
  global infoLines
  GuiControl,, InfoList,|
  infoLines := 0
}


;/*==================================================================================================
;  Description
;  
;  20100113      Wim       Created
;==================================================================================================*/
GetCmdLine()
{
  global SelectedFileName := GetCommandLine()
  DisplayFile(SelectedFileName)
}


;/*==================================================================================================
;  Description
;  
;  20100113      Wim       Created
;==================================================================================================*/
DisplayFile(file)
{
  lines := ""
  lineCount := 0
  Info(file)
  
  Loop, Read, %file%
  {
    lineCount += 1
    lines%lineCount% := A_LoopReadLine
  }

  loop %lineCount%
  {
    Info(lines%A_Index%)
  }
}
